package controller

import (
	"net/http"

	"doctor_api_backend/config"
	"doctor_api_backend/models"

	"github.com/gin-gonic/gin"
)

// 创建医嘱，创建医嘱不能重复医嘱编码,而且医嘱编码是必传参数
func CreateMedicalOrder(c *gin.Context) {

	// 获取请求参数
	var medicalOrder models.MedicalOrder
	if err := c.ShouldBindJSON(&medicalOrder); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// 检查医嘱编码是否已存在
	var existingMedicalOrder models.MedicalOrder
	if err := config.DB.Where("medical_order_code = ?", medicalOrder.MedicalOrderCode).First(&existingMedicalOrder).Error; err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "医嘱编码已存在"})
		return
	}

	// 创建医嘱
	config.DB.Create(&medicalOrder)

	// 返回创建成功信息
	c.JSON(http.StatusOK, gin.H{"message": "医嘱创建成功"})
}

// 通过医嘱id查询医嘱,医嘱id是必传参数
func GetMedicalOrder(c *gin.Context) {
	// 获取请求参数
	id := c.Param("id")

	// 查询医嘱
	var medicalOrder models.MedicalOrder
	config.DB.First(&medicalOrder, id)

	// 返回查询结果
	c.JSON(http.StatusOK, medicalOrder)
}

// 通过医嘱id更新医嘱
func UpdateMedicalOrder(c *gin.Context) {
	// 获取请求参数
	id := c.Param("id")
	var medicalOrder models.MedicalOrder
	if err := c.ShouldBindJSON(&medicalOrder); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// 更新医嘱
	config.DB.Model(&models.MedicalOrder{}).Where("id = ?", id).Updates(medicalOrder)

	// 返回更新成功信息
	c.JSON(http.StatusOK, gin.H{"message": "医嘱更新成功"})
}

// 通过医嘱id删除医嘱,找到medical_order_code才删除成功，否者打印删除失败，不存在
func DeleteMedicalOrder(c *gin.Context) {
	// 获取请求参数
	medicalOrderCode := c.Param("medicalOrderCode")

	if err := config.DB.Where("medical_order_code = ?", medicalOrderCode).First(&medicalOrderCode).Error; err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "医嘱编码不存在"})
		return
	}

	// 删除医嘱
	config.DB.Delete(&models.MedicalOrder{}, medicalOrderCode)

	// 返回删除成功信息
	c.JSON(http.StatusOK, gin.H{"message": "医嘱删除成功"})
}

// 查询所有医嘱
func GetAllMedicalOrders(c *gin.Context) {
	// 查询所有医嘱
	var medicalOrders []models.MedicalOrder
	config.DB.Find(&medicalOrders)

	// 返回查询结果
	c.JSON(http.StatusOK, medicalOrders)
}

// 通过病人id查询病人医嘱
func GetPatientMedicalOrders(c *gin.Context) {
	// 获取请求参数
	id := c.Param("id")

	// 查询病人医嘱
	var medicalOrders []models.MedicalOrder
	config.DB.Where("patient_id = ?", id).Find(&medicalOrders)

	// 返回查询结果
	c.JSON(http.StatusOK, medicalOrders)
}

// 通过医生id查询医生医嘱 通过doctor_id查询医生医嘱
func GetDoctorMedicalOrders(c *gin.Context) {
	// 获取请求参数
	doctorId := c.Param("doctorId")

	// 查询医生医嘱
	var medicalOrders []models.MedicalOrder
	config.DB.Where("doctor_id = ?", doctorId).Find(&medicalOrders)

	// 返回查询结果
	c.JSON(http.StatusOK, medicalOrders)
}
